D:\a\scloud-dns\scloud-dns\src\exceptions\mod.rs
Line | Count | Source |
1 | | use crate::dns::q_class::DNSClass; |
2 | | use strum_macros::EnumIter; |
3 | | |
4 | | mod tests; |
5 | | |
6 | | #[repr(u16)] |
7 | | #[allow(non_camel_case_types)] |
8 | | #[derive(Debug, PartialEq, EnumIter, Clone)] |
9 | | pub enum SCloudException { |
10 | | // HEADER SECTION |
11 | | SCLOUD_HEADER_DESERIALIZATION_FAILED = 0, |
12 | | SCLOUD_HEADER_BYTES_EMPTY = 1, |
13 | | |
14 | | // QUESTION SECTION |
15 | | SCLOUD_QUESTION_DESERIALIZATION_FAILED = 2, |
16 | | SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG = 3, |
17 | | |
18 | | // ANSWER SECTION |
19 | | SCLOUD_ANSWER_DESERIALIZATION_FAILED = 4, |
20 | | SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG = 5, |
21 | | SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT = 6, |
22 | | SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS = 7, |
23 | | |
24 | | // AUTHORITY SECTION |
25 | | SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS = 8, |
26 | | SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT = 9, |
27 | | |
28 | | // ADDITIONAL SECTION |
29 | | SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED = 10, |
30 | | SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT = 11, |
31 | | SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG = 12, |
32 | | SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS = 13, |
33 | | |
34 | | // QNAME |
35 | | SCLOUD_IMPOSSIBLE_PARSE_QNAME = 14, |
36 | | SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF = 15, |
37 | | SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF = 16, |
38 | | SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED = 17, |
39 | | |
40 | | // QTYPE |
41 | | SCLOUD_QTYPE_U16_FOR_DNSRECORDTYPE_UNKNOWN = 18, |
42 | | SCLOUD_QTYPE_DNSRECORDTYPE_FOR_U16_UNKNOWN = 77, |
43 | | |
44 | | //QCLASS |
45 | | SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN = 19, |
46 | | SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN = 20, |
47 | | |
48 | | // STUB RESOLVER |
49 | | SCLOUD_STUB_RESOLVER_INVALID_DNS_ID = 21, |
50 | | SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE = 22, |
51 | | SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET = 23, |
52 | | SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT = 24, |
53 | | SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET = 25, |
54 | | SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET = 26, |
55 | | |
56 | | // RESOLVER |
57 | | SCLOUD_RESOLVER_RESPONSE_MISMATCH = 27, |
58 | | SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE = 28, |
59 | | SCLOUD_RESOLVER_ANSWER_QNAME_MISMATCH = 29, |
60 | | SCLOUD_RESOLVER_AUTHORITY_QNAME_MISMATCH = 30, |
61 | | SCLOUD_RESOLVER_ADDITIONNAL_QNAME_MISMATCH = 31, |
62 | | |
63 | | // ZONES |
64 | | SCLOUD_ZONE_PARSER_FILE_NOT_FOUND = 32, |
65 | | SCLOUD_ZONE_PARSER_FILE_EMPTY = 33, |
66 | | SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE = 34, |
67 | | SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD = 35, |
68 | | |
69 | | // CONFIG |
70 | | SCLOUD_CONFIG_FILE_NOT_FOUND = 36, |
71 | | SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON = 37, |
72 | | SCLOUD_CONFIG_MISSING_FORWARDER = 38, |
73 | | SCLOUD_CONFIG_MISSING_ADDRESS = 39, |
74 | | SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR = 40, |
75 | | SCLOUD_CONFIG_INVALID_SERVER_PORT = 41, |
76 | | SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD = 42, |
77 | | SCLOUD_CONFIG_INVALID_DNS_LIMITS = 43, |
78 | | SCLOUD_CONFIG_INVALID_LISTENER = 44, |
79 | | SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME = 45, |
80 | | SCLOUD_CONFIG_INVALID_LISTENER_PORT = 46, |
81 | | SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS = 47, |
82 | | SCLOUD_CONFIG_TLS_MISSING_CERT = 48, |
83 | | SCLOUD_CONFIG_TLS_MISSING_KEY = 49, |
84 | | SCLOUD_CONFIG_TLS_REQUIRES_TCP = 50, |
85 | | SCLOUD_CONFIG_INVALID_DOH = 51, |
86 | | SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE = 52, |
87 | | SCLOUD_CONFIG_INVALID_FORWARDER = 53, |
88 | | SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME = 54, |
89 | | SCLOUD_CONFIG_INVALID_ZONE = 55, |
90 | | SCLOUD_CONFIG_DUPLICATE_ZONE_NAME = 56, |
91 | | SCLOUD_CONFIG_ZONE_MISSING_FILE = 57, |
92 | | SCLOUD_CONFIG_SLAVE_MISSING_MASTERS = 58, |
93 | | SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS = 59, |
94 | | SCLOUD_CONFIG_INVALID_INLINE_ZONE = 60, |
95 | | SCLOUD_CONFIG_UNKNOWN_TSIG_KEY = 61, |
96 | | SCLOUD_CONFIG_MX_MISSING_PRIORITY = 62, |
97 | | SCLOUD_CONFIG_PRIORITY_ON_NON_MX = 63, |
98 | | SCLOUD_CONFIG_INVALID_VIEW = 64, |
99 | | SCLOUD_CONFIG_DUPLICATE_VIEW_NAME = 65, |
100 | | SCLOUD_CONFIG_INVALID_DYNUPDATE = 66, |
101 | | SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE = 67, |
102 | | |
103 | | // LOGGING |
104 | | SCLOUD_LOGGING_PATH_CREATION_FAILED = 68, |
105 | | SCLOUD_LOGGING_FILE_CREATION_OR_OPENING_FAILED = 69, |
106 | | |
107 | | // WORKER |
108 | | SCLOUD_WORKER_FAILED_TO_SPAWN = 70, |
109 | | SCLOUD_WORKER_TX_NOT_SET = 71, |
110 | | SCLOUD_WORKER_RX_NOT_SET = 72, |
111 | | SCLOUD_WORKER_LISTENER_BIND_FAILED = 73, |
112 | | SCLOUD_WORKER_FAILED_TO_CREATE_DECODER = 74, |
113 | | SCLOUD_WORKER_UNKNOWN_TYPE = 75, |
114 | | SCLOUD_WORKER_SEM_CLOSED = 81, |
115 | | |
116 | | // TCP ACCEPTOR |
117 | | SCLOUD_WORKER_TCPA_SOCKET_CREATION_FAILED = 78, |
118 | | SCLOUD_WORKER_TCPA_RECV_FAILED = 79, |
119 | | SCLOUD_WORKER_TCPA_SOCKET_BIND_FAILED = 80, |
120 | | |
121 | | // LISTENER |
122 | | SCLOUD_WORKER_LISTENER_RECV_FAILED = 76, |
123 | | SCLOUD_WORKER_LISTENER_NO_SOCKET = 82, |
124 | | // DECODER |
125 | | } |
126 | | |
127 | | impl SCloudException { |
128 | | #[allow(unused)] |
129 | 166 | pub(crate) fn to_str(&self) -> &'static str { |
130 | 166 | match self { |
131 | | //HEADER SECTION |
132 | | SCloudException::SCLOUD_HEADER_DESERIALIZATION_FAILED => { |
133 | 2 | "Buffer length is less than header length." |
134 | | } |
135 | | |
136 | 2 | SCloudException::SCLOUD_HEADER_BYTES_EMPTY => "The header is empty.", |
137 | | |
138 | | // QUESTION SECTION |
139 | | SCloudException::SCLOUD_QUESTION_DESERIALIZATION_FAILED => { |
140 | 2 | "Buffer length is less than question section length." |
141 | | } |
142 | | SCloudException::SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG => { |
143 | 2 | "`q_name` too long." |
144 | | } |
145 | | |
146 | | // ANSWER SECTION |
147 | | SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED => { |
148 | 2 | "Buffer length is less than answer section length." |
149 | | } |
150 | | SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG => { |
151 | 2 | "Label too long for DNS." |
152 | | } |
153 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT => { |
154 | 2 | "Failed to parse DNS answer section: not enough bytes for TYPE, CLASS, TTL, and RDLENGTH." |
155 | | } |
156 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS => { |
157 | 2 | "Failed to parse DNS answer section: RDLENGTH exceeds remaining buffer size." |
158 | | } |
159 | | |
160 | | // AUTHORITY SECTION |
161 | | SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => { |
162 | 2 | "Buffer length is less than authority section length." |
163 | | } |
164 | | SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT => { |
165 | 2 | "Impossible to deserialize, `buf.len()` is lower than `pos+10`. (buf too short)" |
166 | | } |
167 | | |
168 | | // ADDITIONAL SECTION |
169 | | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED => { |
170 | 2 | "Buffer length is less than additional section length." |
171 | | } |
172 | | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT => { |
173 | 2 | "Impossible to deserialize, `buf.len()` is lower than `pos+10`. (buf too short)" |
174 | | } |
175 | | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG => { |
176 | 2 | "`q_name` too long." |
177 | | } |
178 | | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => { |
179 | 2 | "Buffer length is less than authority section length." |
180 | | } |
181 | | |
182 | | // QNAME |
183 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME => { |
184 | 2 | "Impossible to parse the `q_name`, check if a `q_name` is provided." |
185 | | } |
186 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF => { |
187 | 2 | "Impossible to parse the `q_name`, pos is greater than buffer length." |
188 | | } |
189 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF => { |
190 | 2 | "Impossible to parse the `q_name`, pos and len are greater than buffer length." |
191 | | } |
192 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED => { |
193 | 2 | "Impossible to parse the `q_name`, compression 0xC0xx failed." |
194 | | } |
195 | | |
196 | | // QTYPE |
197 | | SCloudException::SCLOUD_QTYPE_U16_FOR_DNSRECORDTYPE_UNKNOWN => { |
198 | 2 | "Unknown `q_type`, failed to find a DNSRecordType for a u16." |
199 | | } |
200 | | SCloudException::SCLOUD_QTYPE_DNSRECORDTYPE_FOR_U16_UNKNOWN => { |
201 | 2 | "Unknown `q_type`, failed to find a u16 for a DNSRecordType." |
202 | | } |
203 | | |
204 | | //QCLASS |
205 | | SCloudException::SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN => { |
206 | 2 | "Unknown `q_class`, failed to find a DNSClass for a u16." |
207 | | } |
208 | | SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN => { |
209 | 2 | "Unknown `q_class`, failed to find a u16 for a DNSClass." |
210 | | } |
211 | | |
212 | | // STUB RESOLVER |
213 | | SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_ID => { |
214 | 2 | "Invalid DNS ID (difference between `response.header.id` and `request_id`)." |
215 | | } |
216 | 2 | SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE => "Invalid DNS response.", |
217 | | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET => { |
218 | 2 | "Failed to create UDP socket." |
219 | | } |
220 | | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT => { |
221 | 2 | "Failed to read, socket timeout." |
222 | | } |
223 | | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET => { |
224 | 2 | "Failed to send to socket." |
225 | | } |
226 | | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET => { |
227 | 2 | "Failed to receive from socket." |
228 | | } |
229 | | |
230 | | // RESOLVER |
231 | | SCloudException::SCLOUD_RESOLVER_RESPONSE_MISMATCH => { |
232 | 2 | "DNS response failed validation against the original query." |
233 | | } |
234 | 2 | SCloudException::SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE => "Record out of zone.", |
235 | | SCloudException::SCLOUD_RESOLVER_ANSWER_QNAME_MISMATCH => { |
236 | 2 | "`AnswerSection.q_name` is not the same as `QuestionSection.q_name`" |
237 | | } |
238 | | SCloudException::SCLOUD_RESOLVER_AUTHORITY_QNAME_MISMATCH => { |
239 | 2 | "`AuthoritySection.q_name` is not the same as `QuestionSection.q_name`" |
240 | | } |
241 | | SCloudException::SCLOUD_RESOLVER_ADDITIONNAL_QNAME_MISMATCH => { |
242 | 2 | "`AdditionnalSection.q_name` is not the same as `QuestionSection.q_name`" |
243 | | } |
244 | | |
245 | | // ZONES |
246 | 2 | SCloudException::SCLOUD_ZONE_PARSER_FILE_NOT_FOUND => "Zone file not found.", |
247 | 2 | SCloudException::SCLOUD_ZONE_PARSER_FILE_EMPTY => "Zone file is empty.", |
248 | | SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE => { |
249 | 2 | "`zone_parser()` failed to read the zone file." |
250 | | } |
251 | | SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD => { |
252 | 2 | "`zone_parser()` detect TTL field but failed to read this field." |
253 | | } |
254 | | |
255 | | //CONFIG |
256 | 2 | SCloudException::SCLOUD_CONFIG_FILE_NOT_FOUND => "Configuration file not found.", |
257 | | SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON => { |
258 | 2 | "Error while parsing the JSON file." |
259 | | } |
260 | 2 | SCloudException::SCLOUD_CONFIG_MISSING_FORWARDER => "Missing forwarder.", |
261 | 2 | SCloudException::SCLOUD_CONFIG_MISSING_ADDRESS => "Missing address.", |
262 | | SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR => { |
263 | 2 | "Error while parsing the IP address." |
264 | | } |
265 | | SCloudException::SCLOUD_CONFIG_INVALID_SERVER_PORT => { |
266 | 2 | "Invalid server port (must be between 1 and 65535)." |
267 | | } |
268 | | SCloudException::SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD => { |
269 | 2 | "Invalid max UDP payload size." |
270 | | } |
271 | | SCloudException::SCLOUD_CONFIG_INVALID_DNS_LIMITS => { |
272 | 2 | "Invalid DNS limits (label length, domain length, or packet size)." |
273 | | } |
274 | 2 | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER => "Invalid listener configuration.", |
275 | | SCloudException::SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME => { |
276 | 2 | "Duplicate listener name detected." |
277 | | } |
278 | 2 | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PORT => "Invalid listener port.", |
279 | | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS => { |
280 | 2 | "Listener has no valid protocol defined." |
281 | | } |
282 | | SCloudException::SCLOUD_CONFIG_TLS_MISSING_CERT => { |
283 | 2 | "TLS enabled but certificate path is missing." |
284 | | } |
285 | | SCloudException::SCLOUD_CONFIG_TLS_MISSING_KEY => { |
286 | 2 | "TLS enabled but private key path is missing." |
287 | | } |
288 | 2 | SCloudException::SCLOUD_CONFIG_TLS_REQUIRES_TCP => "TLS listeners require TCP support.", |
289 | | SCloudException::SCLOUD_CONFIG_INVALID_DOH => { |
290 | 2 | "Invalid DNS-over-HTTPS (DoH) configuration." |
291 | | } |
292 | | SCloudException::SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE => { |
293 | 2 | "Unknown or invalid ACL reference." |
294 | | } |
295 | 2 | SCloudException::SCLOUD_CONFIG_INVALID_FORWARDER => "Invalid forwarder configuration.", |
296 | | SCloudException::SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME => { |
297 | 2 | "Duplicate forwarder name detected." |
298 | | } |
299 | 2 | SCloudException::SCLOUD_CONFIG_INVALID_ZONE => "Invalid DNS zone configuration.", |
300 | 2 | SCloudException::SCLOUD_CONFIG_DUPLICATE_ZONE_NAME => "Duplicate zone name detected.", |
301 | 2 | SCloudException::SCLOUD_CONFIG_ZONE_MISSING_FILE => "Zone file path is missing.", |
302 | | SCloudException::SCLOUD_CONFIG_SLAVE_MISSING_MASTERS => { |
303 | 2 | "Slave zone has no master servers defined." |
304 | | } |
305 | | SCloudException::SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS => { |
306 | 2 | "Forward zone has no forwarders defined." |
307 | | } |
308 | | SCloudException::SCLOUD_CONFIG_INVALID_INLINE_ZONE => { |
309 | 2 | "Inline zone is invalid (missing records or SOA)." |
310 | | } |
311 | | SCloudException::SCLOUD_CONFIG_UNKNOWN_TSIG_KEY => { |
312 | 2 | "Referenced TSIG key does not exist." |
313 | | } |
314 | | SCloudException::SCLOUD_CONFIG_MX_MISSING_PRIORITY => { |
315 | 2 | "MX record is missing priority field." |
316 | | } |
317 | | SCloudException::SCLOUD_CONFIG_PRIORITY_ON_NON_MX => { |
318 | 2 | "Priority field is only allowed on MX records." |
319 | | } |
320 | 2 | SCloudException::SCLOUD_CONFIG_INVALID_VIEW => "Invalid DNS view configuration.", |
321 | 2 | SCloudException::SCLOUD_CONFIG_DUPLICATE_VIEW_NAME => "Duplicate view name detected.", |
322 | | SCloudException::SCLOUD_CONFIG_INVALID_DYNUPDATE => { |
323 | 2 | "Invalid dynamic update configuration." |
324 | | } |
325 | | SCloudException::SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE => { |
326 | 2 | "Dynamic update references an unknown zone." |
327 | | } |
328 | | |
329 | | // LOGGING |
330 | 2 | SCloudException::SCLOUD_LOGGING_PATH_CREATION_FAILED => "Logging path creation failed.", |
331 | | SCloudException::SCLOUD_LOGGING_FILE_CREATION_OR_OPENING_FAILED => { |
332 | 2 | "Log file creation/opening failed." |
333 | | } |
334 | | |
335 | | // WORKER |
336 | | SCloudException::SCLOUD_WORKER_FAILED_TO_SPAWN => { |
337 | 2 | "Failed to link the worker to the thread, and cannot spawn a worker." |
338 | | } |
339 | 2 | SCloudException::SCLOUD_WORKER_TX_NOT_SET => "`dns_tx` is not set for this worker.", |
340 | 2 | SCloudException::SCLOUD_WORKER_RX_NOT_SET => "`dns_rx` is not set for this worker.", |
341 | | SCloudException::SCLOUD_WORKER_LISTENER_BIND_FAILED => { |
342 | 2 | "Listener bind just failed at 'threads::run(&self)'." |
343 | | } |
344 | | SCloudException::SCLOUD_WORKER_FAILED_TO_CREATE_DECODER => { |
345 | 2 | "Failed to create a decoding worker." |
346 | | } |
347 | 2 | SCloudException::SCLOUD_WORKER_UNKNOWN_TYPE => "Unknown worker type.", |
348 | | SCloudException::SCLOUD_WORKER_SEM_CLOSED => { |
349 | 2 | "Failed to .acquire_owned(), because the Semaphore is closed." |
350 | | } |
351 | | |
352 | | // TCP ACCEPTOR |
353 | | SCloudException::SCLOUD_WORKER_TCPA_SOCKET_CREATION_FAILED => { |
354 | 2 | "Impossible to create a TCP_ACCEPTOR worker, socket creation failed." |
355 | | } |
356 | 2 | SCloudException::SCLOUD_WORKER_TCPA_RECV_FAILED => "TCP_ACCEPTOR recv() failed.", |
357 | | SCloudException::SCLOUD_WORKER_TCPA_SOCKET_BIND_FAILED => { |
358 | 2 | "Impossible to bind TCP_ACCEPTOR socket, most probable cause: another worker is already using this port." |
359 | | } |
360 | | |
361 | | // LISTENER |
362 | 2 | SCloudException::SCLOUD_WORKER_LISTENER_RECV_FAILED => "Listener recv() failed.", |
363 | | SCloudException::SCLOUD_WORKER_LISTENER_NO_SOCKET => { |
364 | 2 | "LISTENER worker spawned directly — use TCP_ACCEPTOR instead." |
365 | | } |
366 | 0 | _ => "Unknown error.", |
367 | | } |
368 | 166 | } |
369 | | } |
370 | | |
371 | | impl TryFrom<u16> for SCloudException { |
372 | | type Error = SCloudException; |
373 | | |
374 | 238 | fn try_from(v: u16) -> Result<Self, Self::Error> { |
375 | 238 | match v { |
376 | | //HEADER SECTION |
377 | 3 | 0 => Ok(SCloudException::SCLOUD_HEADER_DESERIALIZATION_FAILED), |
378 | 3 | 1 => Ok(SCloudException::SCLOUD_HEADER_BYTES_EMPTY), |
379 | | |
380 | | // QUESTION SECTION |
381 | 3 | 2 => Ok(SCloudException::SCLOUD_QUESTION_DESERIALIZATION_FAILED), |
382 | 3 | 3 => Ok(SCloudException::SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG), |
383 | | |
384 | | // ANSWER SECTION |
385 | 3 | 4 => Ok(SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED), |
386 | 3 | 5 => Ok(SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG), |
387 | 3 | 6 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT), |
388 | 3 | 7 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS), |
389 | | |
390 | | // AUTHORITY SECTION |
391 | 3 | 8 => Ok(SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS), |
392 | 3 | 9 => Ok(SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT), |
393 | | |
394 | | // ADDITIONAL SECTION |
395 | 3 | 10 => Ok(SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED), |
396 | 3 | 11 => Ok(SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT), |
397 | 3 | 12 => Ok(SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG), |
398 | 3 | 13 => Ok(SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS), |
399 | | |
400 | | // QNAME SECTION |
401 | 3 | 14 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME), |
402 | 3 | 15 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF), |
403 | 3 | 16 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF), |
404 | 3 | 17 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED), |
405 | | |
406 | | // ANSWER SECTION |
407 | 3 | 18 => Ok(SCloudException::SCLOUD_QTYPE_U16_FOR_DNSRECORDTYPE_UNKNOWN), |
408 | 3 | 77 => Ok(SCloudException::SCLOUD_QTYPE_DNSRECORDTYPE_FOR_U16_UNKNOWN), |
409 | | |
410 | 3 | 19 => Ok(SCloudException::SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN), |
411 | 3 | 20 => Ok(SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN), |
412 | | |
413 | 3 | 21 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_ID), |
414 | 3 | 22 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE), |
415 | 3 | 23 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET), |
416 | 3 | 24 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT), |
417 | 3 | 25 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET), |
418 | 3 | 26 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET), |
419 | 3 | 27 => Ok(SCloudException::SCLOUD_RESOLVER_RESPONSE_MISMATCH), |
420 | 3 | 28 => Ok(SCloudException::SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE), |
421 | 3 | 29 => Ok(SCloudException::SCLOUD_RESOLVER_ANSWER_QNAME_MISMATCH), |
422 | 3 | 30 => Ok(SCloudException::SCLOUD_RESOLVER_AUTHORITY_QNAME_MISMATCH), |
423 | 3 | 31 => Ok(SCloudException::SCLOUD_RESOLVER_ADDITIONNAL_QNAME_MISMATCH), |
424 | 3 | 32 => Ok(SCloudException::SCLOUD_ZONE_PARSER_FILE_NOT_FOUND), |
425 | 3 | 33 => Ok(SCloudException::SCLOUD_ZONE_PARSER_FILE_EMPTY), |
426 | 3 | 34 => Ok(SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE), |
427 | 3 | 35 => Ok(SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD), |
428 | 3 | 36 => Ok(SCloudException::SCLOUD_CONFIG_FILE_NOT_FOUND), |
429 | 3 | 37 => Ok(SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON), |
430 | 3 | 38 => Ok(SCloudException::SCLOUD_CONFIG_MISSING_FORWARDER), |
431 | 3 | 39 => Ok(SCloudException::SCLOUD_CONFIG_MISSING_ADDRESS), |
432 | 3 | 40 => Ok(SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR), |
433 | 3 | 41 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_SERVER_PORT), |
434 | 3 | 42 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD), |
435 | 3 | 43 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_DNS_LIMITS), |
436 | 3 | 44 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_LISTENER), |
437 | 3 | 45 => Ok(SCloudException::SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME), |
438 | 3 | 46 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PORT), |
439 | 3 | 47 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS), |
440 | 3 | 48 => Ok(SCloudException::SCLOUD_CONFIG_TLS_MISSING_CERT), |
441 | 3 | 49 => Ok(SCloudException::SCLOUD_CONFIG_TLS_MISSING_KEY), |
442 | 3 | 50 => Ok(SCloudException::SCLOUD_CONFIG_TLS_REQUIRES_TCP), |
443 | 3 | 51 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_DOH), |
444 | 3 | 52 => Ok(SCloudException::SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE), |
445 | 3 | 53 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_FORWARDER), |
446 | 3 | 54 => Ok(SCloudException::SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME), |
447 | 3 | 55 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_ZONE), |
448 | 3 | 56 => Ok(SCloudException::SCLOUD_CONFIG_DUPLICATE_ZONE_NAME), |
449 | 3 | 57 => Ok(SCloudException::SCLOUD_CONFIG_ZONE_MISSING_FILE), |
450 | 3 | 58 => Ok(SCloudException::SCLOUD_CONFIG_SLAVE_MISSING_MASTERS), |
451 | 3 | 59 => Ok(SCloudException::SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS), |
452 | 3 | 60 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_INLINE_ZONE), |
453 | 3 | 61 => Ok(SCloudException::SCLOUD_CONFIG_UNKNOWN_TSIG_KEY), |
454 | 3 | 62 => Ok(SCloudException::SCLOUD_CONFIG_MX_MISSING_PRIORITY), |
455 | 3 | 63 => Ok(SCloudException::SCLOUD_CONFIG_PRIORITY_ON_NON_MX), |
456 | 3 | 64 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_VIEW), |
457 | 3 | 65 => Ok(SCloudException::SCLOUD_CONFIG_DUPLICATE_VIEW_NAME), |
458 | 3 | 66 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_DYNUPDATE), |
459 | 3 | 67 => Ok(SCloudException::SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE), |
460 | 3 | 68 => Ok(SCloudException::SCLOUD_LOGGING_PATH_CREATION_FAILED), |
461 | 3 | 69 => Ok(SCloudException::SCLOUD_LOGGING_FILE_CREATION_OR_OPENING_FAILED), |
462 | 3 | 70 => Ok(SCloudException::SCLOUD_WORKER_FAILED_TO_SPAWN), |
463 | 3 | 71 => Ok(SCloudException::SCLOUD_WORKER_TX_NOT_SET), |
464 | 3 | 72 => Ok(SCloudException::SCLOUD_WORKER_RX_NOT_SET), |
465 | 3 | 73 => Ok(SCloudException::SCLOUD_WORKER_LISTENER_BIND_FAILED), |
466 | 3 | 74 => Ok(SCloudException::SCLOUD_WORKER_FAILED_TO_CREATE_DECODER), |
467 | 3 | 75 => Ok(SCloudException::SCLOUD_WORKER_UNKNOWN_TYPE), |
468 | 3 | 76 => Ok(SCloudException::SCLOUD_WORKER_LISTENER_RECV_FAILED), |
469 | 0 | 78 => Ok(SCloudException::SCLOUD_WORKER_TCPA_SOCKET_CREATION_FAILED), |
470 | 0 | 79 => Ok(SCloudException::SCLOUD_WORKER_TCPA_RECV_FAILED), |
471 | 0 | 80 => Ok(SCloudException::SCLOUD_WORKER_TCPA_SOCKET_BIND_FAILED), |
472 | 0 | 81 => Ok(SCloudException::SCLOUD_WORKER_SEM_CLOSED), |
473 | 0 | 82 => Ok(SCloudException::SCLOUD_WORKER_LISTENER_NO_SOCKET), |
474 | | |
475 | 4 | _ => Err(SCloudException::SCLOUD_WORKER_UNKNOWN_TYPE), |
476 | | } |
477 | 238 | } |
478 | | } |
479 | | |
480 | | impl TryFrom<SCloudException> for u16 { |
481 | | type Error = SCloudException; |
482 | | |
483 | 234 | fn try_from(c: SCloudException) -> Result<u16, Self::Error> { |
484 | | #[allow(unreachable_patterns)] |
485 | 234 | match c { |
486 | 3 | SCloudException::SCLOUD_HEADER_DESERIALIZATION_FAILED => Ok(0), |
487 | 3 | SCloudException::SCLOUD_HEADER_BYTES_EMPTY => Ok(1), |
488 | 3 | SCloudException::SCLOUD_QUESTION_DESERIALIZATION_FAILED => Ok(2), |
489 | 3 | SCloudException::SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG => Ok(3), |
490 | 3 | SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED => Ok(4), |
491 | 3 | SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG => Ok(5), |
492 | 3 | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT => Ok(6), |
493 | 3 | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS => Ok(7), |
494 | 3 | SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => Ok(8), |
495 | 3 | SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT => Ok(9), |
496 | 3 | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED => Ok(10), |
497 | 3 | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT => Ok(11), |
498 | 3 | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG => Ok(12), |
499 | 3 | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => Ok(13), |
500 | 3 | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME => Ok(14), |
501 | 3 | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF => Ok(15), |
502 | 3 | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF => Ok(16), |
503 | 3 | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED => Ok(17), |
504 | 3 | SCloudException::SCLOUD_QTYPE_U16_FOR_DNSRECORDTYPE_UNKNOWN => Ok(18), |
505 | 3 | SCloudException::SCLOUD_QTYPE_DNSRECORDTYPE_FOR_U16_UNKNOWN => Ok(77), |
506 | 3 | SCloudException::SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN => Ok(19), |
507 | 3 | SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN => Ok(20), |
508 | 3 | SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_ID => Ok(21), |
509 | 3 | SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE => Ok(22), |
510 | 3 | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET => Ok(23), |
511 | 3 | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT => Ok(24), |
512 | 3 | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET => Ok(25), |
513 | 3 | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET => Ok(26), |
514 | 3 | SCloudException::SCLOUD_RESOLVER_RESPONSE_MISMATCH => Ok(27), |
515 | 3 | SCloudException::SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE => Ok(28), |
516 | 3 | SCloudException::SCLOUD_RESOLVER_ANSWER_QNAME_MISMATCH => Ok(29), |
517 | 3 | SCloudException::SCLOUD_RESOLVER_AUTHORITY_QNAME_MISMATCH => Ok(30), |
518 | 3 | SCloudException::SCLOUD_RESOLVER_ADDITIONNAL_QNAME_MISMATCH => Ok(31), |
519 | 3 | SCloudException::SCLOUD_ZONE_PARSER_FILE_NOT_FOUND => Ok(32), |
520 | 3 | SCloudException::SCLOUD_ZONE_PARSER_FILE_EMPTY => Ok(33), |
521 | 3 | SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE => Ok(34), |
522 | 3 | SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD => Ok(35), |
523 | 3 | SCloudException::SCLOUD_CONFIG_FILE_NOT_FOUND => Ok(36), |
524 | 3 | SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON => Ok(37), |
525 | 3 | SCloudException::SCLOUD_CONFIG_MISSING_FORWARDER => Ok(38), |
526 | 3 | SCloudException::SCLOUD_CONFIG_MISSING_ADDRESS => Ok(39), |
527 | 3 | SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR => Ok(40), |
528 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_SERVER_PORT => Ok(41), |
529 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD => Ok(42), |
530 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_DNS_LIMITS => Ok(43), |
531 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER => Ok(44), |
532 | 3 | SCloudException::SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME => Ok(45), |
533 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PORT => Ok(46), |
534 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS => Ok(47), |
535 | 3 | SCloudException::SCLOUD_CONFIG_TLS_MISSING_CERT => Ok(48), |
536 | 3 | SCloudException::SCLOUD_CONFIG_TLS_MISSING_KEY => Ok(49), |
537 | 3 | SCloudException::SCLOUD_CONFIG_TLS_REQUIRES_TCP => Ok(50), |
538 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_DOH => Ok(51), |
539 | 3 | SCloudException::SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE => Ok(52), |
540 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_FORWARDER => Ok(53), |
541 | 3 | SCloudException::SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME => Ok(54), |
542 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_ZONE => Ok(55), |
543 | 3 | SCloudException::SCLOUD_CONFIG_DUPLICATE_ZONE_NAME => Ok(56), |
544 | 3 | SCloudException::SCLOUD_CONFIG_ZONE_MISSING_FILE => Ok(57), |
545 | 3 | SCloudException::SCLOUD_CONFIG_SLAVE_MISSING_MASTERS => Ok(58), |
546 | 3 | SCloudException::SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS => Ok(59), |
547 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_INLINE_ZONE => Ok(60), |
548 | 3 | SCloudException::SCLOUD_CONFIG_UNKNOWN_TSIG_KEY => Ok(61), |
549 | 3 | SCloudException::SCLOUD_CONFIG_MX_MISSING_PRIORITY => Ok(62), |
550 | 3 | SCloudException::SCLOUD_CONFIG_PRIORITY_ON_NON_MX => Ok(63), |
551 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_VIEW => Ok(64), |
552 | 3 | SCloudException::SCLOUD_CONFIG_DUPLICATE_VIEW_NAME => Ok(65), |
553 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_DYNUPDATE => Ok(66), |
554 | 3 | SCloudException::SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE => Ok(67), |
555 | 3 | SCloudException::SCLOUD_LOGGING_PATH_CREATION_FAILED => Ok(68), |
556 | 3 | SCloudException::SCLOUD_LOGGING_FILE_CREATION_OR_OPENING_FAILED => Ok(69), |
557 | 3 | SCloudException::SCLOUD_WORKER_FAILED_TO_SPAWN => Ok(70), |
558 | 3 | SCloudException::SCLOUD_WORKER_TX_NOT_SET => Ok(71), |
559 | 3 | SCloudException::SCLOUD_WORKER_RX_NOT_SET => Ok(72), |
560 | 3 | SCloudException::SCLOUD_WORKER_LISTENER_BIND_FAILED => Ok(73), |
561 | 3 | SCloudException::SCLOUD_WORKER_FAILED_TO_CREATE_DECODER => Ok(74), |
562 | 3 | SCloudException::SCLOUD_WORKER_UNKNOWN_TYPE => Ok(75), |
563 | 3 | SCloudException::SCLOUD_WORKER_LISTENER_RECV_FAILED => Ok(76), |
564 | 0 | SCloudException::SCLOUD_WORKER_TCPA_SOCKET_CREATION_FAILED => Ok(78), |
565 | 0 | SCloudException::SCLOUD_WORKER_TCPA_RECV_FAILED => Ok(79), |
566 | 0 | SCloudException::SCLOUD_WORKER_TCPA_SOCKET_BIND_FAILED => Ok(80), |
567 | 0 | SCloudException::SCLOUD_WORKER_SEM_CLOSED => Ok(81), |
568 | 0 | SCloudException::SCLOUD_WORKER_LISTENER_NO_SOCKET => Ok(82), |
569 | 0 | _ => Err(SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN), |
570 | | } |
571 | 234 | } |
572 | | } |